/**
 * 球馆配置管理工具
 * 用于加载和管理球馆的经纬度、详细地址等配置信息
 * 支持多地址配置
 */

// 球馆配置数据
const venueConfig = require('./venueConfig.json');

/**
 * 根据球馆ID获取球馆配置信息
 * @param {number} venueId - 球馆ID
 * @returns {Object|null} 球馆配置信息，如果未找到则返回null
 */
function getVenueById(venueId) {
  if (!venueConfig || !venueConfig.venues) {
    console.error('球馆配置数据未正确加载');
    return null;
  }
  
  return venueConfig.venues.find(venue => venue.id === venueId) || null;
}

/**
 * 根据球馆名称获取球馆配置信息
 * @param {string} venueName - 球馆名称
 * @returns {Object|null} 球馆配置信息，如果未找到则返回null
 */
function getVenueByName(venueName) {
  if (!venueConfig || !venueConfig.venues) {
    console.error('球馆配置数据未正确加载');
    return null;
  }
  
  return venueConfig.venues.find(venue => venue.name === venueName) || null;
}

/**
 * 根据数据源名称获取球馆配置信息
 * @param {string} dataSource - 数据源名称
 * @returns {Object|null} 球馆配置信息，如果未找到则返回null
 */
function getVenueByDataSource(dataSource) {
  if (!venueConfig || !venueConfig.venues) {
    console.error('球馆配置数据未正确加载');
    return null;
  }
  
  return venueConfig.venues.find(venue => venue.dataSource === dataSource) || null;
}

/**
 * 获取所有球馆配置信息
 * @returns {Array} 所有球馆配置信息数组
 */
function getAllVenues() {
  if (!venueConfig || !venueConfig.venues) {
    console.error('球馆配置数据未正确加载');
    return [];
  }
  
  return venueConfig.venues;
}

/**
 * 根据球馆ID获取主要地址信息
 * @param {number} venueId - 球馆ID
 * @returns {Object|null} 包含latitude和longitude的对象，如果未找到则返回null
 */
function getVenueCoordinates(venueId) {
  const venue = getVenueById(venueId);
  if (!venue || !venue.addresses || venue.addresses.length === 0) {
    return null;
  }
  
  const primaryAddress = venue.addresses.find(addr => addr.isPrimary) || venue.addresses[0];
  return {
    latitude: primaryAddress.latitude,
    longitude: primaryAddress.longitude
  };
}

/**
 * 根据球馆ID获取主要详细地址信息
 * @param {number} venueId - 球馆ID
 * @returns {string|null} 详细地址，如果未找到则返回null
 */
function getVenueAddress(venueId) {
  const venue = getVenueById(venueId);
  if (!venue || !venue.addresses || venue.addresses.length === 0) {
    return null;
  }
  
  const primaryAddress = venue.addresses.find(addr => addr.isPrimary) || venue.addresses[0];
  return primaryAddress.address;
}

/**
 * 根据球馆ID获取所有地址信息
 * @param {number} venueId - 球馆ID
 * @returns {Array} 所有地址信息数组，如果未找到则返回空数组
 */
function getVenueAllAddresses(venueId) {
  const venue = getVenueById(venueId);
  if (!venue || !venue.addresses) {
    return [];
  }
  
  return venue.addresses;
}

/**
 * 根据球馆ID获取主要位置信息
 * @param {number} venueId - 球馆ID
 * @returns {string|null} 位置信息，如果未找到则返回null
 */
function getVenueLocation(venueId) {
  const venue = getVenueById(venueId);
  if (!venue || !venue.addresses || venue.addresses.length === 0) {
    return null;
  }
  
  const primaryAddress = venue.addresses.find(addr => addr.isPrimary) || venue.addresses[0];
  return primaryAddress.location;
}

/**
 * 根据球馆ID获取指定地址的经纬度信息
 * @param {number} venueId - 球馆ID
 * @param {number} addressIndex - 地址索引（默认为0，即第一个地址）
 * @returns {Object|null} 包含latitude和longitude的对象，如果未找到则返回null
 */
function getVenueCoordinatesByIndex(venueId, addressIndex = 0) {
  const venue = getVenueById(venueId);
  if (!venue || !venue.addresses || venue.addresses.length <= addressIndex) {
    return null;
  }
  
  const address = venue.addresses[addressIndex];
  return {
    latitude: address.latitude,
    longitude: address.longitude
  };
}

/**
 * 根据球馆ID获取指定地址的详细信息
 * @param {number} venueId - 球馆ID
 * @param {number} addressIndex - 地址索引（默认为0，即第一个地址）
 * @returns {Object|null} 地址详细信息，如果未找到则返回null
 */
function getVenueAddressByIndex(venueId, addressIndex = 0) {
  const venue = getVenueById(venueId);
  if (!venue || !venue.addresses || venue.addresses.length <= addressIndex) {
    return null;
  }
  
  return venue.addresses[addressIndex];
}

/**
 * 根据球馆ID获取球馆基本信息
 * @param {number} venueId - 球馆ID
 * @returns {Object|null} 包含name、location、phone、description的对象，如果未找到则返回null
 */
function getVenueBasicInfo(venueId) {
  const venue = getVenueById(venueId);
  if (!venue) {
    return null;
  }
  
  const primaryAddress = venue.addresses && venue.addresses.length > 0 
    ? (venue.addresses.find(addr => addr.isPrimary) || venue.addresses[0])
    : null;
  
  return {
    name: venue.name,
    location: primaryAddress ? primaryAddress.location : null,
    phone: venue.phone,
    description: venue.description
  };
}

/**
 * 搜索球馆（支持按名称、位置、地址搜索）
 * @param {string} keyword - 搜索关键词
 * @returns {Array} 匹配的球馆配置信息数组
 */
function searchVenues(keyword) {
  if (!venueConfig || !venueConfig.venues) {
    console.error('球馆配置数据未正确加载');
    return [];
  }
  
  const lowerKeyword = keyword.toLowerCase();
  return venueConfig.venues.filter(venue => {
    // 搜索基本信息
    const basicMatch = venue.name.toLowerCase().includes(lowerKeyword) ||
                      venue.description.toLowerCase().includes(lowerKeyword) ||
                      venue.phone.toLowerCase().includes(lowerKeyword);
    
    // 搜索地址信息
    const addressMatch = venue.addresses && venue.addresses.some(addr => {
      return addr.location.toLowerCase().includes(lowerKeyword) ||
             addr.address.toLowerCase().includes(lowerKeyword);
    });
    
    return basicMatch || addressMatch;
  });
}

/**
 * 获取配置版本信息
 * @returns {Object} 包含版本和最后更新时间的对象
 */
function getConfigInfo() {
  if (!venueConfig) {
    return {
      version: 'unknown',
      lastUpdated: 'unknown'
    };
  }
  
  return {
    version: venueConfig.version || 'unknown',
    lastUpdated: venueConfig.lastUpdated || 'unknown'
  };
}

module.exports = {
  getVenueById,
  getVenueByName,
  getVenueByDataSource,
  getAllVenues,
  getVenueCoordinates,
  getVenueAddress,
  getVenueAllAddresses,
  getVenueLocation,
  getVenueCoordinatesByIndex,
  getVenueAddressByIndex,
  getVenueBasicInfo,
  searchVenues,
  getConfigInfo
};
//  {
//       "id": 15,
//       "name": "3.5+网球（金色华庭店）",
//       "dataSource": "3.5+网球（金色华庭店）",
//       "phone": "0769-33445566",
//       "description": "小区网球场地",
//       "addresses": [
//         {
//           "province": "广东省",
//           "city": "东莞市",
//           "district": "南城街道",
//           "address": "广东省东莞市南城街道金色华庭",
//           "latitude": 22.995246,
//           "longitude": 113.751018,
//           "isPrimary": true
//         }
//       ]
//     },

 // {
    //   "id": 14,
    //   "name": "3.5+网球（新基）",
    //   "dataSource": "3.5+网球（新基）",
    //   "phone": "0769-33445566",
    //   "description": "社区网球场地",
    //   "addresses": [
    //     {
    //       "province": "广东省",
    //       "city": "东莞市",
    //       "district": "南城街道",
    //       "address": "广东省东莞市南城街道新基地产业园A座",
    //       "latitude": 23.002397,
    //       "longitude": 113.730366,
    //       "isPrimary": true
    //     }
    //   ]
    // },